package com.cloud.mall.base;

import com.cloud.mall.constants.Constants;
import lombok.Data;


@Data
public class BaseResponse<T> {

	/**
	 * 返回码
	 */
	private Integer code;
	/**
	 * 消息
	 */
	private String msg;
	
	/**
	 * 返回
	 */
	private T data;
	// 分页

	public BaseResponse() {

	}

	public BaseResponse(Integer code, String msg, T data) {
		super();
		this.code = code;
		this.msg = msg;
		this.data = data;
	}

    public static <T> BaseResponse<T> setResultError(Integer code, String msg) {
        return setResult(code, msg, null);
    }

    // 返回错误，可以传msg
    public static <T>  BaseResponse<T> setResultError(String msg) {
        return setResult(Constants.HTTP_RES_CODE_500, msg, null);
    }
    // 返回错误，可以传msg
    public static <T> BaseResponse<T> setResultError() {
        return setResult(Constants.HTTP_RES_CODE_500, null, null);
    }

    // 返回成功，可以传data值
    public static <T> BaseResponse<T> setResultSuccess(T data) {
        return setResult(Constants.HTTP_RES_CODE_200, Constants.HTTP_RES_CODE_200_VALUE, data);
    }

    // 返回成功，沒有data值
    public static <T> BaseResponse<T> setResultSuccess() {
        return setResult(Constants.HTTP_RES_CODE_200, Constants.HTTP_RES_CODE_200_VALUE, null);
    }

    // 返回成功，沒有data值
    public static <T> BaseResponse<T> setResultSuccess(String msg) {
        return setResult(Constants.HTTP_RES_CODE_200, msg, null);
    }

    // 通用封装
    public static <T> BaseResponse<T> setResult(Integer code, String msg, T data) {
        return new BaseResponse<T>(code, msg, data);
    }

    // 调用数据库层判断
    public static <T> Boolean toDaoResult(int result) {
        return result > 0 ? true : false;
    }

    /**
     * 未登录返回结果
     */
    public static <T> BaseResponse<T> unauthorized(T data) {
        return new BaseResponse<T>(Constants.UNAUTHORIZED_CODE_401, Constants.UNAUTHORIZED_MESSAGE, data);
    }

    /**
     * 访问此资源需要完全的身份验证
     */
    public static <T> BaseResponse<T> checkAuthorized(T data) {
        return new BaseResponse<T>(Constants.CHECKAUTHORIZED_CODE_402, Constants.CHECKAUTHORIZED_MESSAGE, data);
    }

    /**
     * 未授权返回结果
     */
    public static <T> BaseResponse<T> forbidden(T data) {
        return new BaseResponse<T>(Constants.FORBIDDEN_CODE_403, Constants.FORBIDDEN_MESSAGE, data);
    }

}
